// test_client.rs
use std::io::{self, Read, Write};
use std::net::TcpStream;
// use std::thread;
// use std::time::Duration;

fn main() {
    println!("TCP 客户端启动");
    println!("正在连接到服务器...");
    
    // 尝试连接到服务器
    let mut stream = match TcpStream::connect("127.0.0.1:5050") {
        Ok(stream) => {
            println!("连接成功!");
            stream
        }
        Err(e) => {
            println!("无法连接到服务器: {}", e);
            println!("请确保服务器正在运行并监听 5050 端口");
            return;
        }
    };
    
    // 获取服务器地址信息
    let server_addr = match stream.peer_addr() {
        Ok(addr) => addr.to_string(),
        Err(_) => "未知地址".to_string(),
    };
    
    println!("服务器地址: {}", server_addr);
    println!("输入 '/quit' 退出程序");
    println!("----------------------");
    
    let mut buffer = [0; 512];
    
    // 主交互循环
    loop {
        // 读取用户输入
        print!("请输入消息: ");
        io::stdout().flush().unwrap(); // 确保提示信息立即显示
        
        let mut input = String::new();
        match io::stdin().read_line(&mut input) {
            Ok(_) => {
                let input = input.trim(); // 去除换行符
                
                if input.is_empty() {
                    continue; // 跳过空输入
                }
                
                if input == "/quit" {
                    println!("退出程序");
                    break;
                }
                
                // 发送消息到服务器
                if let Err(e) = stream.write_all(input.as_bytes()) {
                    println!("发送失败: {}", e);
                    break;
                }
                
                println!("已发送: {}", input);
                
                // 接收服务器响应
                match stream.read(&mut buffer) {
                    Ok(bytes_read) => {
                        if bytes_read > 0 {
                            let response = String::from_utf8_lossy(&buffer[..bytes_read]);
                            println!("从服务器 {} 接收: {}", server_addr, response);
                        } else {
                            println!("服务器已关闭连接");
                            break;
                        }
                    }
                    Err(e) => {
                        println!("接收失败: {}", e);
                        break;
                    }
                }
                
                // 清空缓冲区
                buffer = [0; 512];
            }
            Err(e) => {
                println!("读取输入失败: {}", e);
                break;
            }
        }
    }
    
    println!("客户端已关闭");
}